#pragma once 
#include <string>
#include <vector>
#include <memory>

namespace TinyRPC{

// 缓冲类
//
class Buffer{
public:
    Buffer();
    std::string read();
    std::string read(int byteLen);
    // retrieve 并不会真正的读取, 类似于moduo
    std::string retrieve(int byteLen);
    void append(char* str, int strlen);
    void append(const std::string& str);
    char* charAt(int idx);
    // 第一个可读字节的地址
    char* charAtReadBegin();
    // 当前缓冲区的大小 writeableLen
    int size();
    // 获取所有可读的字节
    int getReadableLen();
    // 修改读指针
    void addReadIndex(int val);

    
private:
    int m_writeIndex;
    int m_readIndex;
    std::vector<char> m_buf;
};

using BufferPtr = std::shared_ptr<Buffer>;

}